/**
 * 由吸热管组成平板，再由平板拼成多棱柱
 *
 * 目前只有几何参数，没有热力学参数
 * 热力学参数可以单独写成一个类，然后这里持有一个指向那个类的指针

*/

#ifndef MULTI_PANEL_H
#define MULTI_PANEL_H

#include <algorithm/shared/data/topology/geometry/Geometry.h>
#include <algorithm/shared/utils/Vec2.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

namespace solar
{
    class MultiPanel : public Geometry
    {
        public:
            MultiPanel() = default;
            [[nodiscard]] auto getType() const -> GeometryType override { return type_; }
            void testPrint() const;
#include <utils/class_name.inc>

        private:
            // int panel_cnt_;                  // 面板个数
            // int tube_cnt_per_panel_;         // 每个面板上的吸热管的个数
            // double tube_length_;             // 吸热管长度
            // double tube_diameter_;           // 吸热管的直径
            // double interval_between_tubes_;  // 吸热管之间的间隔
            // double interval_between_panels_; //
            Vec2 size_{1, 1};

            int tube_{62};
            int panel_{18};
            int tube_unit_{20};
            double tube_radius_{0.01105}; // 吸热管的半径

            GeometryType type_ = GeometryType::kGeometryMultiPanel;

            // BOOST_DESCRIBE_CLASS(MultiPanel, (Geometry), (), (),
            //                      (panel_cnt_, tube_cnt_per_panel_, tube_length_, tube_diameter_,
            //                       interval_between_tubes_, interval_between_panels_))
            BOOST_DESCRIBE_CLASS(MultiPanel, (Geometry), (), (),
                                 (size_, tube_, panel_, tube_unit_, tube_radius_))
    };

} // namespace solar
#define CURRENT_CLASS_NAME MultiPanel
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(MultiPanel, (Geometry), (), (),
                     (size_, tube_, panel_, tube_unit_, tube_radius_))
#endif // HEATTUBEPANERECEIVER_H
